package com.taotaojs.mybootsuper.service2impl.impl;

import com.taotaojs.mybootsuper.bean.BaseBean;
import com.taotaojs.mybootsuper.service2impl.IMyBasicService;
import org.apache.ibatis.jdbc.SQL;

import java.util.List;

/**
 * 通用Service基本方法
 * @author: TaoTaojs
 * @Date: 2020年03月20日15:49:46
 * @Description:
 * 用于创建service中的通用方法
 * @关联类:
 * @参考链接：
 */
public class MyBasicServiceImpl<T extends BaseBean> extends MyBatchServiceImpl<T> implements IMyBasicService<T> {

    /**
     * 使用sql查询
     * @param sql
     * @return
     */
    @Override
    public List<T> findBySql(String sql){
        return myMapper.findBySql(sql);
    }
    @Override
    public List<T> findBySql(SQL sql){
        return myMapper.findBySql(sql.toString());
    }

    /**
     * 使用sql更新
     * @param sql
     * @return
     */
    @Override
    public Integer updateBySql(SQL sql){
        return updateBySql(sql.toString());
    }
    @Override
    public Integer updateBySql(String sql){
        return myMapper.updateBySql(sql);
    }

    /**
     * 使用sql新增
     * @param sql
     * @return
     */
    @Override
    public Integer insertBySql(SQL sql){
        return myMapper.insertBySql(sql.toString());
    }
    @Override
    public Integer insertBySql(String sql){
        return myMapper.insertBySql(sql);
    }

    /**
     * 使用sql删除
     * @param sql
     * @return
     */
    @Override
    public Integer deleteBySql(SQL sql){
        return myMapper.deleteBySql(sql.toString());
    }
    @Override
    public Integer deleteBySql(String sql){
        return myMapper.insertBySql(sql);
    }

    /**
     * 查询所有数据
     * @return
     */
    @Override
    public List<T> findAll(){
        return myMapper.selectAll();
    }

    /**
     * 如果存在id就更新，如果不存在就插入(不更新空值)
     * @param entity
     * @return
     */
    @Override
    public T addOrUpdateObject(T entity){
        return addOrUpdateObject(entity, false);
    }
    @Override
    public T addOrUpdateObject(T entity, boolean upNull){
        if(entity.getId() != null){
            updateObject(entity, upNull);
        } else {
            insertObject(entity, upNull);
        }
        return entity;
    }

    /**
     * 更新单个对象
     * @param entity
     * @param upNull
     * @return
     */
    @Override
    public Integer updateObject(T entity, boolean upNull){
        if(upNull){
            return myMapper.updateByPrimaryKey(entity);
        } else {
            return myMapper.updateByPrimaryKeySelective(entity);
        }
    }

    /**
     * 新增单个对象
     * @param entity
     * @param upNull
     * @return
     */
    @Override
    public Integer insertObject(T entity, boolean upNull){
        if(upNull){
            return myMapper.insert(entity);
        } else {
            return myMapper.insertSelective(entity);
        }
    }

    /**
     * 删除单个对象
     * @param entity
     * @return
     */
    @Override
    public int deleteObject(T entity){
        return myMapper.delete(entity);
    }

    /**
     * 根据主键删除对象
     * @param id
     * @return
     */
    @Override
    public int deleteObject(Object id){
        return myMapper.deleteByPrimaryKey(id);
    }

    /**
     * 假删除单个对象
     * @param entity
     * @return
     */
    @Override
    public Integer updateByDeleteObject(T entity){
        entity.setEnabled(false);
        return updateObject(entity,false);
    }

    /**
     * 根据对象查询数据
     * @param entity
     * @return
     */
    @Override
    public List<T> findObject(T entity){
        return myMapper.select(entity);
    }

}
